【算法】基数排序

本文介绍了排序算法中的计数排序和基数排序。计数排序是一种非基于比较的排序算法,适合于0到k之间的整数排序,时间复杂度为O(k+n)。基数排序则是从低位到高位按位进行稳定排序,最佳时间复杂度为O(n)。两者均为稳定的排序算法,基数排序在特定情况下能达到最优效率。
摘要由CSDN通过智能技术生成

计数排序

学习基数排序之前首先学习计数排序。

计数排序假设每个元素都是在0到k之间的一个整数。

基数排序的基本思想,对于每个元素x,如果我们知道了小于x的元素的个数,就可以确定输出数组中元素x的位置,那么直接将元素x放到输出数组中。比如有3小于x的元素,那在输出数组中,x肯定位于第4个位置。

计数排序的算法用伪代码描述为:

COUNTING-SORT(A,k)
	// 初始化数组C
	for i=0 to k
		C[i]=0

	// 统计A[j]元素出现的次数,保存到C数组中
	for j=0 to A.length
		C[A[j]]=C[A[j]]+1

	// 统计小于等于A[j]元素的个数
	for k=0 to k
		C[K]=C[K-1]+C[K]

	// 将A中的元素放在B中正确的位置
	for i=A.length to 0
		B[C[A[i]]-1]=A[i]
		C[A[i]]=C[A[i]]-1
注:由于有可能有相同元素存在,所以,每次将A[i]元素放入B数组中,都要将C[A[j]]的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值